package cn.tm.liu.mode.builder.demo1;

/**
 * @author Marvin.L
 * @description
 * @date 2022.04.09 11.29
 */
public class Director {

    /**
     * todo 场景
     * 多个部件或者零件，都可以装配到一个对象中，但是产生的运行结果又相同。
     * 产品类非常复杂，或者产品类中调用顺序不同产生了不同的作用。
     * 初始化一个对象特别复杂，如使用多个构造方法，或者说有很多参数，并且都有默认值时。
     * todo 核心
     * （1） 抽象产品类 computer。
     * （2） Builder 抽象 Builder，规范产品的组建，一般是由子类实现具体的组建过程。
     * （3） MacbookBuilder 具体的Builder类，具体的创建对象的类。
     * （4） Directror 统一组建过程。
     * todo 总结
     * 为了灵活构造复杂对象，该对象会有多个成员变量，在外部调用的时候，不需要或者不方便一次性创建出所有的成员变量，
     * 在这种情况下，使用多个构造方法去构建对象，很难维护，这时候Builder设计模式解决这个问题，进行buid()
     * 方法中创建对象，并且将builder传入，该builder中，维护了传入对象的成员变量。
     */

    ComputerBuilder builder = null;

    public Director(ComputerBuilder builder) {
        this.builder = builder;
    }

    public void construct(String board, String display) {
        builder.buildBoard(board);
        builder.buildDisplay(display);
        builder.buildOs();
    }
}
